// 查询、计算平均值、排序
#include <stdio.h>
#include "head.h"

/**
 * 显示学生成绩列表
 * @param p 指向学生结构体数组的指针
 */
void List(struct student *p)
{
    // 如果第一个学生的学号为0，表示成绩列表为空
    if (p[0].id == 0)
    {
        printf("成绩为空!请先使用命令T录入学生成绩i\n");
    }
    else
    {
        // 输出成绩列表的表头
        printf("学生成绩如下\n");
        printf("学号\t语文\t数学\t外语\t平均分\n");
        // 遍历学生数组，打印每个学生的成绩信息
        for (int i = 0; i < n; i++)
            printf("%d\t%.1f\t%.1f\t%.1f\t%.1f\n", p[i].id, p[i].y, p[i].s, p[i].w, p[i].p);
    }
    // 注意：这里有一个未定义的变量引用，可能是打印函数的简写，应进一步确认
    pr;
}

/**
 * 计算学生的平均成绩
 * @param p 指向学生结构体数组的指针
 */
void Average(struct student *p)
{
    // 如果第一个学生的学号为0，表示成绩列表为空
    if (p[0].id == 0)
    {
        printf("成绩为空！请先使用命令T录入学生成绩\n");
    }
    else
    {
        // 遍历学生数组，计算每个学生的平均成绩
        for (int i = 0; i < n; i++)
        {
            p[i].p = (p[i].y + p[i].s + p[i].w) / 3;
        }
        printf("平均分计算完成。请使用命令L查看\n");
    }
    pr;
}

/**
 * 对学生成绩进行排序
 * @param p 指向学生结构体数组的指针
 */
// 排序
void Sort(struct student *p)
{
    // 如果第一个学生的学号为0，表示成绩列表为空
    if (p[0].id == 0)
    {
        printf("成绩为空!请先使用命令T录入学生成绩\n");
    }
    // 如果第一个学生的平均分为0，表示尚未计算平均成绩
    else if (p[0].p == 0)
    {
        printf("请先计算平均成绩\n");
    }
    else
    {
        // 使用冒泡排序算法对学生成绩进行升序排序
        for (int i = 0; i < n - 1; i++)
        {
            for (int j = 0; j < n - i - 1; j++)
            {
                if (p[j].p < p[j + 1].p)
                {
                    struct student temp;

                    // 交换学生的成绩信息
                    temp.id = p[j].id;
                    p[j].id = p[j + 1].id;
                    p[j + 1].id = temp.id;

                    temp.y = p[j].y;
                    p[j].y = p[j + 1].y;
                    p[j + 1].y = temp.y;

                    temp.s = p[j].s;
                    p[j].s = p[j + 1].s;
                    p[j + 1].s = temp.s;

                    temp.w = p[j].w;
                    p[j].w = p[j + 1].w;
                    p[j + 1].w = temp.w;

                    temp.p = p[j].p;
                    p[j].p = p[j + 1].p;
                    p[j + 1].p = temp.p;
                }
            }
        }
        printf("完成排序。请使用命令L查看\n");
    }
	//  宏名　相当于　printf("请输入命令= ")
    pr;
}